package cn.qiguai.sphapi.mapper;

import cn.qiguai.sphapi.controller.request.GetPageOrderParam;
import cn.qiguai.sphapi.domain.GoodsCategorySaleAttrsValue;
import cn.qiguai.sphapi.domain.ShoppingCartOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ShoppingCartOrderMapper {
	/**
	 * 保存基本订单信息
	 * @param info 信息
	 * @return int
	 */
	int saveOrderInfo(ShoppingCartOrder info);

	/**
	 * 保存商品售卖属性
	 * @param orderId 订单id
	 * @param saleAttrs 商品属性
	 * @return int
	 */
	int saveGoodsAttrs(@Param("orderId") int orderId, @Param("saleAttrs") List<GoodsCategorySaleAttrsValue> saleAttrs);

	/**
	 * 通过userId和goodsId查询出基本订单信息
	 * @param userId 用户id
	 * @param goodsId 商品id
	 * @return list
	 */
	List<ShoppingCartOrder> selectShoppingCartOrderByUserIdAndGoodsId(@Param("userId")int userId, @Param("goodsId")int goodsId);

	/**
	 * 根据订单id查询商品属性
	 * @param orderId 订单id
	 * @return 商品属性
	 */
	List<GoodsCategorySaleAttrsValue> selectGoodsAttrs(int orderId);

	/**
	 * 订单id为orderId的amount增加addAmount
	 * @param orderId 订单id
	 * @param addAmount 订单增加的数量
	 * @return int
	 */
	int updateShoppingCartOrderAmount(@Param("orderId")int orderId, @Param("addAmount")int addAmount);

	/**
	 * 分页查询指定用户的购物车订单
	 * @param param 数据
	 * @param startIndex 查询起始索引
	 * @return list
	 */
	List<ShoppingCartOrder> pageSelectOrder(@Param("param") GetPageOrderParam param, @Param("startIndex")int startIndex);

	/**
	 * 查询指定用户购物车的总订单数
	 * @param userId 用户id
	 * @return 总订单数
	 */
	int pageSelectOrderCount(int userId);

	/**
	 * 改变单个订单的勾选状态
	 * @param orderId 订单id
	 * @return int
	 */
	int updateOneOrderChecked(int orderId);

	/**
	 * 改变指定用户的所有订单的选中状态
	 * @param userId 用户id
	 * @return int
	 */
	int updateAllOrderChecked(@Param("userId") int userId, @Param("flag") boolean flag);

	/**
	 * 删除指定订单基本信息
	 * @param ids 订单id
	 * @return int
	 */
	int removeShoppingCartOrder(List<Integer> ids);

	/**
	 * 删除指定订单属性
	 * @param ids 订单id1
	 * @return int
	 */
	int removeShoppingCartOrderSaleAttrs(List<Integer> ids);

	/**
	 * 修改指定订单的状态
	 * @param ids 订单id
	 * @return int
	 */
	int updateShoppingCartOrderStatus(List<Integer> ids);
}
